﻿using System;
using System.Collections.Generic;
using System.Data;
using System.Data.OleDb;
using System.Linq;
using System.Text;
using System.Collections;
using MigColetaMinMax.Entidades;
using System.Data.OracleClient;

namespace MigColetaMinMax.DAO.DAO_Oracle
{
    public class DAOOracle
    {
        public DAOOracle() { }
        
        public static DataTable ObterMinMax(int grFat,string diaMesAno)
        {
            DataTable retorno = new DataTable();
            try
            {
                Hashtable htParametros = new Hashtable();
                htParametros["@diaMesAno"] = diaMesAno;
                htParametros["@grupoFat"] = grFat;

                ORAMSDataAccess OraDataAccess = new ORAMSDataAccess();
                DataTable dtDados = OraDataAccess.ExecutaConsultaMigracao(htParametros);

                retorno = dtDados;

            }            
            catch (Exception)
            {
                throw;
                    
            }
            return retorno;
        }

        public static DataTable ObterHistoricoRotas(int grFat)
        {
            DataTable retorno = new DataTable();
            try
            {
                Hashtable htParametros = new Hashtable();                
                htParametros["@grupoFat"] = grFat;

                ORAMSDataAccess OraDataAccess = new ORAMSDataAccess();
                DataTable dtDados = OraDataAccess.ExecutaConsultaHistorico("ObterHistoricoRotas", htParametros);

                retorno = dtDados;

            }
            catch (Exception)
            {
                throw new Exception();

            }
            return retorno;
        }

        public static DataTable ObterPorRotas(int rota)
        {
            DataTable retorno = new DataTable();
            try
            {
                Hashtable htParametros = new Hashtable();
                htParametros["@rota"] = rota;

                ORAMSDataAccess OraDataAccess = new ORAMSDataAccess();
                DataTable dtDados = OraDataAccess.ExecutaConsultaRotas(htParametros);

                retorno = dtDados;

            }
            catch (Exception)
            {
                throw new Exception();

            }
            return retorno;
        }

        #region Controle

        public static Leiturista ObterLeiturista(int matricula)
        {
            Leiturista leiturista = new Leiturista();
            try
            {
                ORAMSDataAccess db = new ORAMSDataAccess();
                DataTable dt = db.ObterLeiturista(matricula);

                foreach (DataRow dr in dt.Rows)
                {
                    leiturista.Nome = dr["Nome"].ToString();
                    leiturista.Matricula = dr["IdLeiturista"].ToString();
                    leiturista.Diretorio_imp = dr["Diretorio_imp"].ToString();
                    leiturista.Diretorio_exp = dr["Diretorio_EXP"].ToString();
                }
                return leiturista;
            }
            catch (Exception)
            {
                throw;
            }
        }

        public static DataTable ObterTodosDadosParaControle(int grupoFat, string mesFat, int matricula)
        {
            DataTable retorno = new DataTable();
            try
            {
                ORAMSDataAccess db = new ORAMSDataAccess();
                DataTable dt = db.ExecutaConsultaDadosParaControle(grupoFat, mesFat, matricula);
                retorno = dt;
            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return retorno;
        }

        #endregion

        #region Retorno

        public static bool InserirRetornoFotosExternas(List<Retorno> lst)
        {
            bool retorno = true;

            try
            {
                foreach (var item in lst)
                {
                    Retorno obj = new Retorno();                                        
                    obj.IdGrupoFat = item.IdGrupoFat;
                    obj.Mes_ano = item.Mes_ano;                                        
                    obj.IdFoto = item.IdFoto;
                    obj.FotoDigital = item.FotoDigital;
                    obj.Matricula = item.Matricula;
                    obj.Leiturista = item.Leiturista;
                    obj.DataFoto = item.DataFoto;

                    ORAMSDataAccess db = new ORAMSDataAccess();
                    db.ExecutaAtualizacaoRetornoFotosExternas_WM(obj);
                }
            }
            catch (Exception ex)
            {
                retorno = false;
                throw new Exception(ex.Message);
            }

            return retorno;
        }

        public static bool InserirRetorno(List<Retorno> lst)
        {
            bool retorno = true;
            
            try
            {
                foreach (var item in lst)
                {
                    Retorno obj = new Retorno();
                    obj.IdUC = item.IdUC;
                    obj.Nr_medidor_kwh = item.Nr_medidor_kwh;
                    obj.IdGrupoFat = item.IdGrupoFat;
                    obj.Mes_ano = item.Mes_ano;
                    obj.IdRota = item.IdRota;
                    obj.Leitura_Lida = item.Leitura_Lida;
                    obj.Data_Leitura = item.Data_Leitura;
                    obj.Data_Satelite = item.Data_Satelite;
                    obj.Mens1 = item.Mens1;
                    obj.Mens2 = item.Mens2;
                    obj.Mens3 = item.Mens3;
                    obj.Mens4 = item.Mens4;
                    obj.Utm_x = item.Utm_x;
                    obj.Utm_y = item.Utm_y;
                    obj.Latitude = item.Latitude;
                    obj.Longitude = item.Longitude;
                    obj.Lat_degress = item.Lat_degress;
                    obj.Lng_degress = item.Lng_degress;
                    obj.Cal_Distancia = item.Cal_Distancia;
                    obj.Tempo_percorrido = item.Tempo_percorrido;
                    obj.IdFoto = item.IdFoto;
                    obj.FotoDigital = item.FotoDigital;
                    obj.Matricula = item.Matricula;
                    obj.Leiturista = item.Leiturista;

                    ORAMSDataAccess db = new ORAMSDataAccess();
                    db.ExecutaAtualizacaoRetorno_WM(obj);
                }
            }
            catch (Exception ex)
            {
                retorno = false;     
                throw new Exception(ex.Message);                
            }

            return retorno;
        }

        public static void InsereRetornoLeituras(Roteiro roteiro)
        {
            ORAMSDataAccess db = new ORAMSDataAccess();
            db.InsereRetornoLeituras_WM(roteiro);
        }

        public static bool DeleteRetornoFotosExternas(Retorno obj)
        {
            bool retorno = true;

            try
            {

                ORAMSDataAccess db = new ORAMSDataAccess();
                db.ExecutaAtualizacaoDeleteRetornoFotosExternas_WM(obj);

            }
            catch (Exception)
            {
                retorno = false;
            }

            return retorno;
        }

        public static bool DeleteRetorno(Roteiro obj)
        {
            bool retorno = true;

            try
            {
                
                ORAMSDataAccess db = new ORAMSDataAccess();
                db.ExecutaAtualizacaoDeleteRetorno_WM(obj);
                
            }
            catch (Exception)
            {
                retorno = false;
            }

            return retorno;
        }
        
        public static bool ExistRetorno(Roteiro obj)
        {
            bool retorno = false;
            try
            {
                ORAMSDataAccess db = new ORAMSDataAccess();
                DataTable dt = db.ExecutaConsultaExistRetorno_WM(obj);

                if (dt.Rows.Count > 0)
                {
                    retorno = true;
                }

            }
            catch (Exception ex)
            {
                throw new Exception(ex.Message);
            }

            return retorno;
        }
        
        #endregion
    }
}
